home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / jaz_clib.arc / GETCRC.C < prev    next >
Text File  |  1989-04-09  |  1KB  |  41 lines

  1. /*
  2. ┌────────────────────────────────────────────────────────────────────────────┐
  3. │getcrc.c                                                                    │
  4. │Return a crc word from a user specified buffer                              │
  5. │                                                                            │
  6. │ (C) JazSoft Software by Jack A. Zucker (301) 794-5950                      │
  7. └────────────────────────────────────────────────────────────────────────────┘
  8. */
  9.  
  10. #define CRC_POLY_LOW 33
  11. #define CRC_POLY_HIGH 16
  12.  
  13. unsigned getcrc(fpacket,flen)
  14. char *fpacket;
  15. int flen;
  16. {
  17.   unsigned int w,ch,j,savec,hicrc,locrc;
  18.  
  19.   hicrc = locrc = 0;
  20.  
  21.   for (w = 0 ; w < flen ; w ++) {
  22.     ch = *fpacket++;
  23.     for (j = 1 ; j <= 8 ; j ++) {
  24.       ch *= 2;
  25.       savec = ch;
  26.       ch &= 0x00ff;
  27.       hicrc *= 2;
  28.       locrc *= 2;
  29.       if (savec > 255) locrc |= 1;
  30.       if (locrc > 255) hicrc |= 1;
  31.       if (hicrc > 255) {
  32.     hicrc ^= CRC_POLY_HIGH;
  33.     locrc ^= CRC_POLY_LOW;
  34.       }
  35.       hicrc &= 0x00ff;
  36.       locrc &= 0x00ff;
  37.     }
  38.   }
  39.   return((hicrc << 8) | locrc);
  40. }
  41.